bitkeeper revision 1.1159.224.4 (41f06da8Jxtc-BtgSecZ0k3NlNY9Bw)
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Fri, 21 Jan 2005 02:49:12 +0000 (02:49 +0000)
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Fri, 21 Jan 2005 02:49:12 +0000 (02:49 +0000)
Merge labyrinth.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-2.0-testing.bk
into labyrinth.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-unstable.bk

1  2 
.rootkeys
linux-2.4.29-xen-sparse/arch/xen/kernel/setup.c
linux-2.4.29-xen-sparse/arch/xen/mm/fault.c
linux-2.4.29-xen-sparse/mkbuildtree

diff --cc .rootkeys
index 912684303126eed16eea13cc49b1f66129c1b336,0e6a0705b56eab9f1eb62f30949278daf7a422fc..63e4735f40b7f155f4a34f398004697121f4a75c
+++ b/.rootkeys
  3f815145vGYx1WY79voKkZB9yKwJKQ extras/mini-os/time.c
  3f815145xlKBAQmal9oces3G_Mvxqw extras/mini-os/traps.c
  4187ca95_eQN62ugV1zliQcfzXrHnw install.sh
- 3e5a4e6589G-U42lFKs43plskXoFxQ linux-2.4.28-xen-sparse/Makefile
- 3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg linux-2.4.28-xen-sparse/arch/xen/Makefile
- 3e5a4e65n-KhsEAs-A4ULiStBp-r6w linux-2.4.28-xen-sparse/arch/xen/boot/Makefile
- 3e5a4e65OV_j_DBtjzt5vej771AJsA linux-2.4.28-xen-sparse/arch/xen/config.in
- 40648526SxcA4lGIHB_k7ID8VlRSzw linux-2.4.28-xen-sparse/arch/xen/defconfig-xen0
- 40c73c77QesbL7eIvG-fJGAtVwhGRg linux-2.4.28-xen-sparse/arch/xen/defconfig-xenU
- 3e6377f5xwPfYZkPHPrDbEq1PRN7uQ linux-2.4.28-xen-sparse/arch/xen/drivers/balloon/Makefile
- 4083dc16z0jvZEH4PiVDbDRreaNp6w linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/Makefile
- 4083dc16KQus88a4U3uCV6qVCA6_8Q linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/backend/Makefile
- 4075806dI5kfeMD5RV-DA0PYoThx_w linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile
- 4075806d4-j7vN0Mn0bklI1cRUX1vQ linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/common.h
- 4075806dibjCcfuXv6CINMhxWTw3jQ linux-2.4.28-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c
- 3e5a4e65G3e2s0ghPMgiJ-gBTUJ0uQ linux-2.4.28-xen-sparse/arch/xen/drivers/console/Makefile
- 3e5a4e656nfFISThfbyXQOA6HN6YHw linux-2.4.28-xen-sparse/arch/xen/drivers/dom0/Makefile
- 40420a6ebRqDjufoN1WSJvolEW2Wjw linux-2.4.28-xen-sparse/arch/xen/drivers/evtchn/Makefile
- 4083dc16-Kd5y9psK_yk161sme5j5Q linux-2.4.28-xen-sparse/arch/xen/drivers/netif/Makefile
- 4083dc16UmHXxS9g_UFVnkUpN-oP2Q linux-2.4.28-xen-sparse/arch/xen/drivers/netif/backend/Makefile
- 405853f2wg7JXZJNltspMwOZJklxgw linux-2.4.28-xen-sparse/arch/xen/drivers/netif/frontend/Makefile
- 3e5a4e65lWzkiPXsZdzPt2RNnJGG1g linux-2.4.28-xen-sparse/arch/xen/kernel/Makefile
- 3e5a4e65_hqfuxtGG8IUy6wRM86Ecg linux-2.4.28-xen-sparse/arch/xen/kernel/entry.S
- 3e5a4e65Hy_1iUvMTPsNqGNXd9uFpg linux-2.4.28-xen-sparse/arch/xen/kernel/head.S
- 3e5a4e65RMGcuA-HCn3-wNx3fFQwdg linux-2.4.28-xen-sparse/arch/xen/kernel/i386_ksyms.c
- 3e5a4e653U6cELGv528IxOLHvCq8iA linux-2.4.28-xen-sparse/arch/xen/kernel/irq.c
- 3e5a4e65muT6SU3ck47IP87Q7Ti5hA linux-2.4.28-xen-sparse/arch/xen/kernel/ldt.c
- 4051db95N9N99FjsRwi49YKUNHWI8A linux-2.4.28-xen-sparse/arch/xen/kernel/pci-pc.c
- 3e5a4e65IGt3WwQDNiL4h-gYWgNTWQ linux-2.4.28-xen-sparse/arch/xen/kernel/process.c
- 3e5a4e66tR-qJMLj3MppcKqmvuI2XQ linux-2.4.28-xen-sparse/arch/xen/kernel/setup.c
- 3e5a4e66fWSTagLGU2P8BGFGRjhDiw linux-2.4.28-xen-sparse/arch/xen/kernel/signal.c
- 3e5a4e66N__lUXNwzQ-eADRzK9LXuQ linux-2.4.28-xen-sparse/arch/xen/kernel/time.c
- 3e5a4e66aHCbQ_F5QZ8VeyikLmuRZQ linux-2.4.28-xen-sparse/arch/xen/kernel/traps.c
- 3e5a4e66-9_NczrVMbuQkoSLyXckIw linux-2.4.28-xen-sparse/arch/xen/lib/Makefile
- 3e5a4e6637ZDk0BvFEC-aFQs599-ng linux-2.4.28-xen-sparse/arch/xen/lib/delay.c
- 3e5a4e66croVgpcJyJuF2ycQw0HuJw linux-2.4.28-xen-sparse/arch/xen/mm/Makefile
- 3e5a4e66l8Q5Tv-6B3lQIRmaVbFPzg linux-2.4.28-xen-sparse/arch/xen/mm/fault.c
- 3e5a4e661gLzzff25pJooKIIWe7IWg linux-2.4.28-xen-sparse/arch/xen/mm/init.c
- 3f0bed43UUdQichXAiVNrjV-y2Kzcg linux-2.4.28-xen-sparse/arch/xen/mm/ioremap.c
- 3e5a4e66qRlSTcjafidMB6ulECADvg linux-2.4.28-xen-sparse/arch/xen/vmlinux.lds
- 3e5a4e66mrtlmV75L1tjKDg8RaM5gA linux-2.4.28-xen-sparse/drivers/block/ll_rw_blk.c
- 40d70c24-Dy2HUMrwSZagfXvAPnI4w linux-2.4.28-xen-sparse/drivers/char/Makefile
- 3f108aeaLcGDgQdFAANLTUEid0a05w linux-2.4.28-xen-sparse/drivers/char/mem.c
- 3e5a4e66rw65CxyolW9PKz4GG42RcA linux-2.4.28-xen-sparse/drivers/char/tty_io.c
- 40c9c0c1pPwYE3-4i-oI3ubUu7UgvQ linux-2.4.28-xen-sparse/drivers/scsi/aic7xxx/Makefile
- 3e5a4e669uzIE54VwucPYtGwXLAbzA linux-2.4.28-xen-sparse/fs/exec.c
- 3e5a4e66wbeCpsJgVf_U8Jde-CNcsA linux-2.4.28-xen-sparse/include/asm-xen/bugs.h
- 3e5a4e66HdSkvIV6SJ1evG_xmTmXHA linux-2.4.28-xen-sparse/include/asm-xen/desc.h
- 3e5a4e66SYp_UpAVcF8Lc1wa3Qtgzw linux-2.4.28-xen-sparse/include/asm-xen/fixmap.h
- 406aeeaaQvl4RNtmd9hDEugBURbFpQ linux-2.4.28-xen-sparse/include/asm-xen/highmem.h
- 3e5a4e67YtcyDLQsShhCfQwPSELfvA linux-2.4.28-xen-sparse/include/asm-xen/hw_irq.h
- 4060044fVx7-tokvNLKBf_6qBB4lqQ linux-2.4.28-xen-sparse/include/asm-xen/io.h
- 3e5a4e673p7PEOyHFm3nHkYX6HQYBg linux-2.4.28-xen-sparse/include/asm-xen/irq.h
- 40d70c240tW7TWArl1VUgIFH2nVO1A linux-2.4.28-xen-sparse/include/asm-xen/keyboard.h
- 3e5a4e678ddsQOpbSiRdy1GRcDc9WA linux-2.4.28-xen-sparse/include/asm-xen/mmu_context.h
- 40d06e5b2YWInUX1Xv9amVANwd_2Xg linux-2.4.28-xen-sparse/include/asm-xen/module.h
- 3e5a4e67mnQfh-R8KcQCaVo2Oho6yg linux-2.4.28-xen-sparse/include/asm-xen/page.h
- 409ba2e7ZfV5hqTvIzxLtpClnxtIzg linux-2.4.28-xen-sparse/include/asm-xen/pci.h
- 3e5a4e67uTYU5oEnIDjxuaez8njjqg linux-2.4.28-xen-sparse/include/asm-xen/pgalloc.h
- 3e5a4e67X7JyupgdYkgDX19Huj2sAw linux-2.4.28-xen-sparse/include/asm-xen/pgtable-2level.h
- 3e5a4e67gr4NLGtQ5CvSLimMYZlkOA linux-2.4.28-xen-sparse/include/asm-xen/pgtable.h
- 3e5a4e676uK4xErTBDH6XJREn9LSyg linux-2.4.28-xen-sparse/include/asm-xen/processor.h
- 41224663YBCUMX1kVo_HRUtgaHTi7w linux-2.4.28-xen-sparse/include/asm-xen/queues.h
- 3e5a4e68uJz-xI0IBVMD7xRLQKJDFg linux-2.4.28-xen-sparse/include/asm-xen/segment.h
- 3e5a4e68Nfdh6QcOKUTGCaYkf2LmYA linux-2.4.28-xen-sparse/include/asm-xen/smp.h
- 4062f7e2PzFOUGT0PaE7A0VprTU3JQ linux-2.4.28-xen-sparse/include/asm-xen/synch_bitops.h
- 3e5a4e68mTr0zcp9SXDbnd-XLrrfxw linux-2.4.28-xen-sparse/include/asm-xen/system.h
- 3f1056a9L_kqHcFheV00KbKBzv9j5w linux-2.4.28-xen-sparse/include/asm-xen/vga.h
- 40659defgWA92arexpMGn8X3QMDj3w linux-2.4.28-xen-sparse/include/asm-xen/xor.h
- 3f056927gMHl7mWB89rb73JahbhQIA linux-2.4.28-xen-sparse/include/linux/blk.h
- 419e0488SBzS3mdUhwgsES5a5e3abA linux-2.4.28-xen-sparse/include/linux/irq.h
- 4124f66fPHG6yvB_vXmesjvzrJ3yMg linux-2.4.28-xen-sparse/include/linux/mm.h
- 401c0590D_kwJDU59X8NyvqSv_Cl2A linux-2.4.28-xen-sparse/include/linux/sched.h
- 40a248afgI0_JKthdYAe8beVfXSTpQ linux-2.4.28-xen-sparse/include/linux/skbuff.h
- 401c0592pLrp_aCbQRo9GXiYQQaVVA linux-2.4.28-xen-sparse/include/linux/timer.h
- 3f9d4b44247udoqWEgFkaHiWv6Uvyg linux-2.4.28-xen-sparse/kernel/time.c
- 401c059bjLBFYHRD4Py2uM3eA1D4zQ linux-2.4.28-xen-sparse/kernel/timer.c
- 3e6e7c1efbQe93xCvOpOVCnXTMmQ5w linux-2.4.28-xen-sparse/mkbuildtree
- 406aeeafkrnCuIVWLFv3kfn4uAD5Eg linux-2.4.28-xen-sparse/mm/highmem.c
- 3e5a4e68GxCIaFH4sy01v1wjapetaA linux-2.4.28-xen-sparse/mm/memory.c
- 3f108af5VxPkLv13tXpXgoRKALQtXQ linux-2.4.28-xen-sparse/mm/mprotect.c
- 3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4.28-xen-sparse/mm/mremap.c
- 409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.28-xen-sparse/mm/page_alloc.c
- 3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.28-xen-sparse/mm/swapfile.c
- 41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.28-xen-sparse/mm/vmalloc.c
- 41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.28-xen-sparse/net/core/skbuff.c
+ 3e5a4e6589G-U42lFKs43plskXoFxQ linux-2.4.29-xen-sparse/Makefile
+ 3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg linux-2.4.29-xen-sparse/arch/xen/Makefile
+ 3e5a4e65n-KhsEAs-A4ULiStBp-r6w linux-2.4.29-xen-sparse/arch/xen/boot/Makefile
+ 3e5a4e65OV_j_DBtjzt5vej771AJsA linux-2.4.29-xen-sparse/arch/xen/config.in
+ 40648526SxcA4lGIHB_k7ID8VlRSzw linux-2.4.29-xen-sparse/arch/xen/defconfig-xen0
+ 40c73c77QesbL7eIvG-fJGAtVwhGRg linux-2.4.29-xen-sparse/arch/xen/defconfig-xenU
+ 3e6377f5xwPfYZkPHPrDbEq1PRN7uQ linux-2.4.29-xen-sparse/arch/xen/drivers/balloon/Makefile
+ 4083dc16z0jvZEH4PiVDbDRreaNp6w linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/Makefile
+ 4083dc16KQus88a4U3uCV6qVCA6_8Q linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/backend/Makefile
+ 4075806dI5kfeMD5RV-DA0PYoThx_w linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile
+ 4075806d4-j7vN0Mn0bklI1cRUX1vQ linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/common.h
+ 4075806dibjCcfuXv6CINMhxWTw3jQ linux-2.4.29-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c
+ 3e5a4e65G3e2s0ghPMgiJ-gBTUJ0uQ linux-2.4.29-xen-sparse/arch/xen/drivers/console/Makefile
+ 3e5a4e656nfFISThfbyXQOA6HN6YHw linux-2.4.29-xen-sparse/arch/xen/drivers/dom0/Makefile
+ 40420a6ebRqDjufoN1WSJvolEW2Wjw linux-2.4.29-xen-sparse/arch/xen/drivers/evtchn/Makefile
+ 4083dc16-Kd5y9psK_yk161sme5j5Q linux-2.4.29-xen-sparse/arch/xen/drivers/netif/Makefile
+ 4083dc16UmHXxS9g_UFVnkUpN-oP2Q linux-2.4.29-xen-sparse/arch/xen/drivers/netif/backend/Makefile
+ 405853f2wg7JXZJNltspMwOZJklxgw linux-2.4.29-xen-sparse/arch/xen/drivers/netif/frontend/Makefile
+ 3e5a4e65lWzkiPXsZdzPt2RNnJGG1g linux-2.4.29-xen-sparse/arch/xen/kernel/Makefile
+ 3e5a4e65_hqfuxtGG8IUy6wRM86Ecg linux-2.4.29-xen-sparse/arch/xen/kernel/entry.S
+ 3e5a4e65Hy_1iUvMTPsNqGNXd9uFpg linux-2.4.29-xen-sparse/arch/xen/kernel/head.S
+ 3e5a4e65RMGcuA-HCn3-wNx3fFQwdg linux-2.4.29-xen-sparse/arch/xen/kernel/i386_ksyms.c
+ 3e5a4e653U6cELGv528IxOLHvCq8iA linux-2.4.29-xen-sparse/arch/xen/kernel/irq.c
+ 3e5a4e65muT6SU3ck47IP87Q7Ti5hA linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c
+ 4051db95N9N99FjsRwi49YKUNHWI8A linux-2.4.29-xen-sparse/arch/xen/kernel/pci-pc.c
+ 3e5a4e65IGt3WwQDNiL4h-gYWgNTWQ linux-2.4.29-xen-sparse/arch/xen/kernel/process.c
+ 3e5a4e66tR-qJMLj3MppcKqmvuI2XQ linux-2.4.29-xen-sparse/arch/xen/kernel/setup.c
+ 3e5a4e66fWSTagLGU2P8BGFGRjhDiw linux-2.4.29-xen-sparse/arch/xen/kernel/signal.c
+ 3e5a4e66N__lUXNwzQ-eADRzK9LXuQ linux-2.4.29-xen-sparse/arch/xen/kernel/time.c
+ 3e5a4e66aHCbQ_F5QZ8VeyikLmuRZQ linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c
+ 3e5a4e66-9_NczrVMbuQkoSLyXckIw linux-2.4.29-xen-sparse/arch/xen/lib/Makefile
+ 3e5a4e6637ZDk0BvFEC-aFQs599-ng linux-2.4.29-xen-sparse/arch/xen/lib/delay.c
+ 3e5a4e66croVgpcJyJuF2ycQw0HuJw linux-2.4.29-xen-sparse/arch/xen/mm/Makefile
+ 3e5a4e66l8Q5Tv-6B3lQIRmaVbFPzg linux-2.4.29-xen-sparse/arch/xen/mm/fault.c
+ 3e5a4e661gLzzff25pJooKIIWe7IWg linux-2.4.29-xen-sparse/arch/xen/mm/init.c
+ 3f0bed43UUdQichXAiVNrjV-y2Kzcg linux-2.4.29-xen-sparse/arch/xen/mm/ioremap.c
+ 3e5a4e66qRlSTcjafidMB6ulECADvg linux-2.4.29-xen-sparse/arch/xen/vmlinux.lds
+ 3e5a4e66mrtlmV75L1tjKDg8RaM5gA linux-2.4.29-xen-sparse/drivers/block/ll_rw_blk.c
+ 40d70c24-Dy2HUMrwSZagfXvAPnI4w linux-2.4.29-xen-sparse/drivers/char/Makefile
+ 3f108aeaLcGDgQdFAANLTUEid0a05w linux-2.4.29-xen-sparse/drivers/char/mem.c
+ 3e5a4e66rw65CxyolW9PKz4GG42RcA linux-2.4.29-xen-sparse/drivers/char/tty_io.c
+ 40c9c0c1pPwYE3-4i-oI3ubUu7UgvQ linux-2.4.29-xen-sparse/drivers/scsi/aic7xxx/Makefile
+ 3e5a4e669uzIE54VwucPYtGwXLAbzA linux-2.4.29-xen-sparse/fs/exec.c
+ 3e5a4e66wbeCpsJgVf_U8Jde-CNcsA linux-2.4.29-xen-sparse/include/asm-xen/bugs.h
+ 3e5a4e66HdSkvIV6SJ1evG_xmTmXHA linux-2.4.29-xen-sparse/include/asm-xen/desc.h
+ 3e5a4e66SYp_UpAVcF8Lc1wa3Qtgzw linux-2.4.29-xen-sparse/include/asm-xen/fixmap.h
+ 406aeeaaQvl4RNtmd9hDEugBURbFpQ linux-2.4.29-xen-sparse/include/asm-xen/highmem.h
+ 3e5a4e67YtcyDLQsShhCfQwPSELfvA linux-2.4.29-xen-sparse/include/asm-xen/hw_irq.h
+ 4060044fVx7-tokvNLKBf_6qBB4lqQ linux-2.4.29-xen-sparse/include/asm-xen/io.h
+ 3e5a4e673p7PEOyHFm3nHkYX6HQYBg linux-2.4.29-xen-sparse/include/asm-xen/irq.h
+ 40d70c240tW7TWArl1VUgIFH2nVO1A linux-2.4.29-xen-sparse/include/asm-xen/keyboard.h
+ 3e5a4e678ddsQOpbSiRdy1GRcDc9WA linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h
+ 40d06e5b2YWInUX1Xv9amVANwd_2Xg linux-2.4.29-xen-sparse/include/asm-xen/module.h
 -3f8707e7ZmZ6TxyX0ZUEfvhA2Pb_xQ linux-2.4.29-xen-sparse/include/asm-xen/msr.h
+ 3e5a4e67mnQfh-R8KcQCaVo2Oho6yg linux-2.4.29-xen-sparse/include/asm-xen/page.h
+ 409ba2e7ZfV5hqTvIzxLtpClnxtIzg linux-2.4.29-xen-sparse/include/asm-xen/pci.h
+ 3e5a4e67uTYU5oEnIDjxuaez8njjqg linux-2.4.29-xen-sparse/include/asm-xen/pgalloc.h
+ 3e5a4e67X7JyupgdYkgDX19Huj2sAw linux-2.4.29-xen-sparse/include/asm-xen/pgtable-2level.h
+ 3e5a4e67gr4NLGtQ5CvSLimMYZlkOA linux-2.4.29-xen-sparse/include/asm-xen/pgtable.h
+ 3e5a4e676uK4xErTBDH6XJREn9LSyg linux-2.4.29-xen-sparse/include/asm-xen/processor.h
+ 41224663YBCUMX1kVo_HRUtgaHTi7w linux-2.4.29-xen-sparse/include/asm-xen/queues.h
+ 3e5a4e68uJz-xI0IBVMD7xRLQKJDFg linux-2.4.29-xen-sparse/include/asm-xen/segment.h
+ 3e5a4e68Nfdh6QcOKUTGCaYkf2LmYA linux-2.4.29-xen-sparse/include/asm-xen/smp.h
+ 4062f7e2PzFOUGT0PaE7A0VprTU3JQ linux-2.4.29-xen-sparse/include/asm-xen/synch_bitops.h
+ 3e5a4e68mTr0zcp9SXDbnd-XLrrfxw linux-2.4.29-xen-sparse/include/asm-xen/system.h
+ 3f1056a9L_kqHcFheV00KbKBzv9j5w linux-2.4.29-xen-sparse/include/asm-xen/vga.h
+ 40659defgWA92arexpMGn8X3QMDj3w linux-2.4.29-xen-sparse/include/asm-xen/xor.h
+ 3f056927gMHl7mWB89rb73JahbhQIA linux-2.4.29-xen-sparse/include/linux/blk.h
+ 419e0488SBzS3mdUhwgsES5a5e3abA linux-2.4.29-xen-sparse/include/linux/irq.h
+ 4124f66fPHG6yvB_vXmesjvzrJ3yMg linux-2.4.29-xen-sparse/include/linux/mm.h
+ 401c0590D_kwJDU59X8NyvqSv_Cl2A linux-2.4.29-xen-sparse/include/linux/sched.h
+ 40a248afgI0_JKthdYAe8beVfXSTpQ linux-2.4.29-xen-sparse/include/linux/skbuff.h
+ 401c0592pLrp_aCbQRo9GXiYQQaVVA linux-2.4.29-xen-sparse/include/linux/timer.h
+ 3f9d4b44247udoqWEgFkaHiWv6Uvyg linux-2.4.29-xen-sparse/kernel/time.c
+ 401c059bjLBFYHRD4Py2uM3eA1D4zQ linux-2.4.29-xen-sparse/kernel/timer.c
+ 3e6e7c1efbQe93xCvOpOVCnXTMmQ5w linux-2.4.29-xen-sparse/mkbuildtree
+ 406aeeafkrnCuIVWLFv3kfn4uAD5Eg linux-2.4.29-xen-sparse/mm/highmem.c
+ 3e5a4e68GxCIaFH4sy01v1wjapetaA linux-2.4.29-xen-sparse/mm/memory.c
+ 3f108af5VxPkLv13tXpXgoRKALQtXQ linux-2.4.29-xen-sparse/mm/mprotect.c
+ 3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4.29-xen-sparse/mm/mremap.c
+ 409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.29-xen-sparse/mm/page_alloc.c
+ 3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.29-xen-sparse/mm/swapfile.c
+ 41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.29-xen-sparse/mm/vmalloc.c
+ 41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.29-xen-sparse/net/core/skbuff.c
  40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.10-xen-sparse/arch/xen/Kconfig
  40f56237utH41NPukqHksuNf29IC9A linux-2.6.10-xen-sparse/arch/xen/Kconfig.drivers
  40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.10-xen-sparse/arch/xen/Makefile
index 0000000000000000000000000000000000000000,3b27174ba66797150fe036443fa0e4b6c154c1b6..f08f3a4369be0004cfa39d16bb5c8b8472deae70
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,1204 +1,1204 @@@
 -multicall_entry_t multicall_list[8];
 -int nr_multicall_ents = 0;
+ /*
+  *  linux/arch/i386/kernel/setup.c
+  *
+  *  Copyright (C) 1995  Linus Torvalds
+  */
+ /*
+  * This file handles the architecture-dependent parts of initialization
+  */
+ #define __KERNEL_SYSCALLS__
+ static int errno;
+ #include <linux/errno.h>
+ #include <linux/sched.h>
+ #include <linux/kernel.h>
+ #include <linux/mm.h>
+ #include <linux/stddef.h>
+ #include <linux/unistd.h>
+ #include <linux/ptrace.h>
+ #include <linux/slab.h>
+ #include <linux/user.h>
+ #include <linux/a.out.h>
+ #include <linux/tty.h>
+ #include <linux/ioport.h>
+ #include <linux/delay.h>
+ #include <linux/config.h>
+ #include <linux/init.h>
+ #include <linux/apm_bios.h>
+ #ifdef CONFIG_BLK_DEV_RAM
+ #include <linux/blk.h>
+ #endif
+ #include <linux/highmem.h>
+ #include <linux/bootmem.h>
+ #include <linux/seq_file.h>
+ #include <linux/reboot.h>
+ #include <asm/processor.h>
+ #include <linux/console.h>
+ #include <linux/module.h>
+ #include <asm/mtrr.h>
+ #include <asm/uaccess.h>
+ #include <asm/system.h>
+ #include <asm/io.h>
+ #include <asm/smp.h>
+ #include <asm/msr.h>
+ #include <asm/desc.h>
+ #include <asm/dma.h>
+ #include <asm/mpspec.h>
+ #include <asm/mmu_context.h>
+ #include <asm/ctrl_if.h>
+ #include <asm/hypervisor.h>
+ #include <asm-xen/xen-public/dom0_ops.h>
+ #include <linux/netdevice.h>
+ #include <linux/rtnetlink.h>
+ #include <linux/tqueue.h>
+ #include <net/pkt_sched.h> /* dev_(de)activate */
+ /*
+  * Point at the empty zero page to start with. We map the real shared_info
+  * page as soon as fixmap is up and running.
+  */
+ shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
+ unsigned long *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
++DEFINE_PER_CPU(multicall_entry_t, multicall_list[8]);
++DEFINE_PER_CPU(int, nr_multicall_ents);
+ /*
+  * Machine setup..
+  */
+ char ignore_irq13;            /* set if exception 16 works */
+ struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
+ unsigned long mmu_cr4_features;
+ unsigned char * vgacon_mmap;
+ /*
+  * Bus types ..
+  */
+ #ifdef CONFIG_EISA
+ int EISA_bus;
+ #endif
+ int MCA_bus;
+ /* for MCA, but anyone else can use it if they want */
+ unsigned int machine_id;
+ unsigned int machine_submodel_id;
+ unsigned int BIOS_revision;
+ unsigned int mca_pentium_flag;
+ /* For PCI or other memory-mapped resources */
+ unsigned long pci_mem_start = 0x10000000;
+ /*
+  * Setup options
+  */
+ struct drive_info_struct { char dummy[32]; } drive_info;
+ struct screen_info screen_info;
+ struct apm_info apm_info;
+ struct sys_desc_table_struct {
+     unsigned short length;
+     unsigned char table[0];
+ };
+ unsigned char aux_device_present;
+ extern int root_mountflags;
+ extern char _text, _etext, _edata, _end;
+ extern int blk_nohighio;
+ int enable_acpi_smp_table;
+ /* Raw start-of-day parameters from the hypervisor. */
+ union xen_start_info_union xen_start_info_union;
+ #define COMMAND_LINE_SIZE 256
+ static char command_line[COMMAND_LINE_SIZE];
+ char saved_command_line[COMMAND_LINE_SIZE];
+ /* parse_mem_cmdline()
+  * returns the value of the mem= boot param converted to pages or 0
+  */ 
+ static int __init parse_mem_cmdline (char ** cmdline_p)
+ {
+     char c = ' ', *to = command_line, *from = saved_command_line;
+     int len = 0;
+     unsigned long long bytes;
+     int mem_param = 0;
+     /* Save unparsed command line copy for /proc/cmdline */
+     memcpy(saved_command_line, xen_start_info.cmd_line, COMMAND_LINE_SIZE);
+     saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+     for (;;) {
+         /*
+          * "mem=nopentium" disables the 4MB page tables.
+          * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
+          * to <mem>, overriding the bios size.
+          * "mem=XXX[KkmM]@XXX[KkmM]" defines a memory region from
+          * <start> to <start>+<mem>, overriding the bios size.
+          */
+         if (c == ' ' && !memcmp(from, "mem=", 4)) {
+             if (to != command_line)
+                 to--;
+             if (!memcmp(from+4, "nopentium", 9)) {
+                 from += 9+4;
+             } else if (!memcmp(from+4, "exactmap", 8)) {
+                 from += 8+4;
+             } else {
+                 bytes = memparse(from+4, &from);
+                 mem_param = bytes>>PAGE_SHIFT;
+               if (*from == '@')
+                     (void)memparse(from+1, &from);
+             }
+         }
+         c = *(from++);
+         if (!c)
+             break;
+         if (COMMAND_LINE_SIZE <= ++len)
+             break;
+         *(to++) = c;
+     }
+     *to = '\0';
+     *cmdline_p = command_line;
+     return mem_param;
+ }
+ /*
+  * Every exception-fixup table is sorted (i.e., kernel main table, and every
+  * module table. Some elements may be out of order if they reference text.init,
+  * for example. 
+  */
+ static void sort_exception_table(struct exception_table_entry *start,
+                                  struct exception_table_entry *end)
+ {
+     struct exception_table_entry *p, *q, tmp;
+     for ( p = start; p < end; p++ )
+     {
+         for ( q = p-1; q > start; q-- )
+             if ( p->insn > q->insn )
+                 break;
+         if ( ++q != p )
+         {
+             tmp = *p;
+             memmove(q+1, q, (p-q)*sizeof(*p));
+             *q = tmp;
+         }
+     }
+ }
+ int xen_module_init(struct module *mod)
+ {
+     sort_exception_table(mod->ex_table_start, mod->ex_table_end);
+     return 0;
+ }
+ void __init setup_arch(char **cmdline_p)
+ {
+     int i,j;
+     unsigned long bootmap_size, start_pfn, lmax_low_pfn;
+     int mem_param;  /* user specified memory size in pages */
+     int boot_pfn;   /* low pages available for bootmem */
+     extern void hypervisor_callback(void);
+     extern void failsafe_callback(void);
+     extern unsigned long cpu0_pte_quicklist[];
+     extern unsigned long cpu0_pgd_quicklist[];
+     extern const struct exception_table_entry __start___ex_table[];
+     extern const struct exception_table_entry __stop___ex_table[];
+     extern char _stext;
+     /* Force a quick death if the kernel panics. */
+     extern int panic_timeout;
+     if ( panic_timeout == 0 )
+         panic_timeout = 1;
+     /* Ensure that the kernel exception-fixup table is sorted. */
+     sort_exception_table(__start___ex_table, __stop___ex_table);
+ #ifndef CONFIG_HIGHIO
+     blk_nohighio = 1;
+ #endif
+     HYPERVISOR_vm_assist(VMASST_CMD_enable,
+                          VMASST_TYPE_4gb_segments);
+         
+     HYPERVISOR_set_callbacks(
+         __KERNEL_CS, (unsigned long)hypervisor_callback,
+         __KERNEL_CS, (unsigned long)failsafe_callback);
+     boot_cpu_data.pgd_quick = cpu0_pgd_quicklist;
+     boot_cpu_data.pte_quick = cpu0_pte_quicklist;
+     ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
+     memset(&drive_info, 0, sizeof(drive_info));
+     memset(&screen_info, 0, sizeof(screen_info));
+     
+     /* This is drawn from a dump from vgacon:startup in standard Linux. */
+     screen_info.orig_video_mode = 3; 
+     screen_info.orig_video_isVGA = 1;
+     screen_info.orig_video_lines = 25;
+     screen_info.orig_video_cols = 80;
+     screen_info.orig_video_ega_bx = 3;
+     screen_info.orig_video_points = 16;
+     memset(&apm_info.bios, 0, sizeof(apm_info.bios));
+     aux_device_present = 0; 
+ #ifdef CONFIG_BLK_DEV_RAM
+     rd_image_start = 0;
+     rd_prompt = 0;
+     rd_doload = 0;
+ #endif
+     root_mountflags &= ~MS_RDONLY;
+     init_mm.start_code = (unsigned long) &_text;
+     init_mm.end_code = (unsigned long) &_etext;
+     init_mm.end_data = (unsigned long) &_edata;
+     init_mm.brk = (unsigned long) &_end;
+     /* The mem= kernel command line param overrides the detected amount
+      * of memory.   For xenolinux, if this override is larger than detected
+      * memory, then boot using only detected memory and make provisions to
+      * use all of the override value.   The hypervisor can give this
+      * domain more memory later on and it will be added to the free
+      * lists at that time.   See claim_new_pages() in
+      * arch/xen/drivers/balloon/balloon.c
+      */
+     mem_param = parse_mem_cmdline(cmdline_p);
+     if (mem_param < xen_start_info.nr_pages)
+         mem_param = xen_start_info.nr_pages;
+ #define PFN_UP(x)     (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
+ #define PFN_DOWN(x)   ((x) >> PAGE_SHIFT)
+ #define PFN_PHYS(x)   ((x) << PAGE_SHIFT)
+ /*
+  * 128MB for vmalloc(), iomap(), kmap(), and fixaddr mappings.
+  */
+ #define VMALLOC_RESERVE       (unsigned long)(128 << 20)
+ #define MAXMEM                (unsigned long)(HYPERVISOR_VIRT_START-PAGE_OFFSET-VMALLOC_RESERVE)
+ #define MAXMEM_PFN    PFN_DOWN(MAXMEM)
+ #define MAX_NONPAE_PFN        (1 << 20)
+     /*
+      * Determine low and high memory ranges:
+      */
+     lmax_low_pfn = max_pfn = mem_param;
+     if (lmax_low_pfn > MAXMEM_PFN) {
+         lmax_low_pfn = MAXMEM_PFN;
+ #ifndef CONFIG_HIGHMEM
+         /* Maximum memory usable is what is directly addressable */
+         printk(KERN_WARNING "Warning only %ldMB will be used.\n",
+                MAXMEM>>20);
+         if (max_pfn > MAX_NONPAE_PFN)
+             printk(KERN_WARNING "Use a PAE enabled kernel.\n");
+         else
+             printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
+         max_pfn = lmax_low_pfn;
+ #else /* !CONFIG_HIGHMEM */
+ #ifndef CONFIG_X86_PAE
+         if (max_pfn > MAX_NONPAE_PFN) {
+             max_pfn = MAX_NONPAE_PFN;
+             printk(KERN_WARNING "Warning only 4GB will be used.\n");
+             printk(KERN_WARNING "Use a PAE enabled kernel.\n");
+         }
+ #endif /* !CONFIG_X86_PAE */
+ #endif /* !CONFIG_HIGHMEM */
+     }
+ #ifdef CONFIG_HIGHMEM
+     highstart_pfn = highend_pfn = max_pfn;
+     if (max_pfn > MAXMEM_PFN) {
+         highstart_pfn = MAXMEM_PFN;
+         printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
+                pages_to_mb(highend_pfn - highstart_pfn));
+     }
+ #endif
+     phys_to_machine_mapping = (unsigned long *)xen_start_info.mfn_list;
+     cur_pgd = init_mm.pgd = (pgd_t *)xen_start_info.pt_base;
+     start_pfn = (__pa(xen_start_info.pt_base) >> PAGE_SHIFT) + 
+         xen_start_info.nr_pt_frames;
+     /*
+      * Initialize the boot-time allocator, and free up all RAM. Then reserve 
+      * space for OS image, initrd, phys->machine table, bootstrap page table,
+      * and the bootmem bitmap. 
+      * NB. There is definitely enough room for the bootmem bitmap in the
+      * bootstrap page table. We are guaranteed to get >=512kB unused 'padding'
+      * for our own use after all bootstrap elements 
+      * (see asm-xen/xen-public/xen.h).
+      */
+     boot_pfn = min((int)xen_start_info.nr_pages,lmax_low_pfn);
+     bootmap_size = init_bootmem(start_pfn,boot_pfn);
+     free_bootmem(0, PFN_PHYS(boot_pfn));
+     reserve_bootmem(__pa(&_stext), 
+                     PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1 - 
+                     __pa(&_stext));
+     /* init_bootmem() set the global max_low_pfn to boot_pfn.  Now max_low_pfn 
+      * can be set to the override value.
+      */
+     max_low_pfn = lmax_low_pfn;
+ #ifdef CONFIG_BLK_DEV_INITRD
+     if ( xen_start_info.mod_start != 0 )
+     {
+         if ( (__pa(xen_start_info.mod_start) + xen_start_info.mod_len) <= 
+              (max_low_pfn << PAGE_SHIFT) )
+         {
+             initrd_start = xen_start_info.mod_start;
+             initrd_end   = initrd_start + xen_start_info.mod_len;
+             initrd_below_start_ok = 1;
+         }
+         else
+         {
+             printk(KERN_ERR "initrd extends beyond end of memory "
+                    "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
+                    __pa(xen_start_info.mod_start) + xen_start_info.mod_len,
+                    max_low_pfn << PAGE_SHIFT);
+             initrd_start = 0;
+         }
+     }
+ #endif
+     paging_init();
+     /* Make sure we have a large enough P->M table. */
+     if ( max_pfn > xen_start_info.nr_pages )
+     {
+         phys_to_machine_mapping = alloc_bootmem_low_pages(
+             max_pfn * sizeof(unsigned long));
+         memset(phys_to_machine_mapping, ~0, max_pfn * sizeof(unsigned long));
+         memcpy(phys_to_machine_mapping,
+                (unsigned long *)xen_start_info.mfn_list,
+                xen_start_info.nr_pages * sizeof(unsigned long));
+         free_bootmem(__pa(xen_start_info.mfn_list), 
+                      PFN_PHYS(PFN_UP(xen_start_info.nr_pages *
+                                      sizeof(unsigned long))));
+     }
+     pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE);
+     for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ )
+     { 
+         pfn_to_mfn_frame_list[j] = 
+             virt_to_machine(&phys_to_machine_mapping[i]) >> PAGE_SHIFT;
+     }
+     HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list =
+       virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT;
+     /* If we are a privileged guest OS then we should request IO privileges. */
+     if ( xen_start_info.flags & SIF_PRIVILEGED ) 
+     {
+         dom0_op_t op;
+         op.cmd           = DOM0_IOPL;
+         op.u.iopl.domain = DOMID_SELF;
+         op.u.iopl.iopl   = 1;
+         if( HYPERVISOR_dom0_op(&op) != 0 )
+             panic("Unable to obtain IOPL, despite being SIF_PRIVILEGED");
+         current->thread.io_pl = 1;
+     }
+     if (xen_start_info.flags & SIF_INITDOMAIN )
+     {
+         if( !(xen_start_info.flags & SIF_PRIVILEGED) )
+             panic("Xen granted us console access but not privileged status");
+ #if defined(CONFIG_VT)
+ #if defined(CONFIG_VGA_CONSOLE)
+         conswitchp = &vga_con;
+ #elif defined(CONFIG_DUMMY_CONSOLE)
+         conswitchp = &dummy_con;
+ #endif
+ #endif
+     }
+ }
+ static int cachesize_override __initdata = -1;
+ static int __init cachesize_setup(char *str)
+ {
+     get_option (&str, &cachesize_override);
+     return 1;
+ }
+ __setup("cachesize=", cachesize_setup);
+ static int __init highio_setup(char *str)
+ {
+     printk("i386: disabling HIGHMEM block I/O\n");
+     blk_nohighio = 1;
+     return 1;
+ }
+ __setup("nohighio", highio_setup);
+ static int __init get_model_name(struct cpuinfo_x86 *c)
+ {
+     unsigned int *v;
+     char *p, *q;
+     if (cpuid_eax(0x80000000) < 0x80000004)
+         return 0;
+     v = (unsigned int *) c->x86_model_id;
+     cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
+     cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
+     cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
+     c->x86_model_id[48] = 0;
+     /* Intel chips right-justify this string for some dumb reason;
+        undo that brain damage */
+     p = q = &c->x86_model_id[0];
+     while ( *p == ' ' )
+         p++;
+     if ( p != q ) {
+         while ( *p )
+             *q++ = *p++;
+         while ( q <= &c->x86_model_id[48] )
+             *q++ = '\0';      /* Zero-pad the rest */
+     }
+     return 1;
+ }
+ static void __init display_cacheinfo(struct cpuinfo_x86 *c)
+ {
+     unsigned int n, dummy, ecx, edx, l2size;
+     n = cpuid_eax(0x80000000);
+     if (n >= 0x80000005) {
+         cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
+         printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
+                edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
+         c->x86_cache_size=(ecx>>24)+(edx>>24);        
+     }
+     if (n < 0x80000006)       /* Some chips just has a large L1. */
+         return;
+     ecx = cpuid_ecx(0x80000006);
+     l2size = ecx >> 16;
+     /* AMD errata T13 (order #21922) */
+     if ((c->x86_vendor == X86_VENDOR_AMD) && (c->x86 == 6)) {
+         if (c->x86_model == 3 && c->x86_mask == 0)    /* Duron Rev A0 */
+             l2size = 64;
+         if (c->x86_model == 4 &&
+             (c->x86_mask==0 || c->x86_mask==1))       /* Tbird rev A1/A2 */
+             l2size = 256;
+     }
+     /* Intel PIII Tualatin. This comes in two flavours.
+      * One has 256kb of cache, the other 512. We have no way
+      * to determine which, so we use a boottime override
+      * for the 512kb model, and assume 256 otherwise.
+      */
+     if ((c->x86_vendor == X86_VENDOR_INTEL) && (c->x86 == 6) &&
+         (c->x86_model == 11) && (l2size == 0))
+         l2size = 256;
+     if (c->x86_vendor == X86_VENDOR_CENTAUR) {
+       /* VIA C3 CPUs (670-68F) need further shifting. */
+       if ((c->x86 == 6) &&
+           ((c->x86_model == 7) || (c->x86_model == 8))) {
+               l2size >>= 8;
+       }
+       /* VIA also screwed up Nehemiah stepping 1, and made
+          it return '65KB' instead of '64KB'
+          - Note, it seems this may only be in engineering samples. */
+       if ((c->x86==6) && (c->x86_model==9) &&
+           (c->x86_mask==1) && (l2size==65))
+               l2size -= 1;
+     }
+     /* Allow user to override all this if necessary. */
+     if (cachesize_override != -1)
+         l2size = cachesize_override;
+     if ( l2size == 0 )
+         return;               /* Again, no L2 cache is possible */
+     c->x86_cache_size = l2size;
+     printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n",
+            l2size, ecx & 0xFF);
+ }
+ static void __init init_c3(struct cpuinfo_x86 *c)
+ {
+     /* Test for Centaur Extended Feature Flags presence */
+     if (cpuid_eax(0xC0000000) >= 0xC0000001) {
+         /* store Centaur Extended Feature Flags as
+          * word 5 of the CPU capability bit array
+          */
+         c->x86_capability[5] = cpuid_edx(0xC0000001);
+     }
+    
+     switch (c->x86_model) {
+     case 9:   /* Nehemiah */
+     default:
+         get_model_name(c);
+         display_cacheinfo(c);
+         break;
+     }
+ }
+ static void __init init_centaur(struct cpuinfo_x86 *c)
+ {
+     /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
+        3DNow is IDd by bit 31 in extended CPUID (1*3231) anyway */
+     clear_bit(0*32+31, &c->x86_capability);
+   
+     switch (c->x86) {
+     case 6:
+         init_c3(c);
+         break;
+     default:
+         panic("Unsupported Centaur CPU (%i)\n", c->x86);
+     }
+ }
+ static int __init init_amd(struct cpuinfo_x86 *c)
+ {
+     int r;
+     /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
+        3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
+     clear_bit(0*32+31, &c->x86_capability);
+       
+     r = get_model_name(c);
+     switch(c->x86)
+     {
+     case 5: /* We don't like AMD K6 */
+         panic("Unsupported AMD processor\n");
+     case 6:   /* An Athlon/Duron. We can trust the BIOS probably */
+         break;
+     }
+     display_cacheinfo(c);
+     return r;
+ }
+ static void __init init_intel(struct cpuinfo_x86 *c)
+ {
+     char *p = NULL;
+     unsigned int l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */
+     if (c->cpuid_level > 1) {
+         /* supports eax=2  call */
+         int i, j, n;
+         int regs[4];
+         unsigned char *dp = (unsigned char *)regs;
+         /* Number of times to iterate */
+         n = cpuid_eax(2) & 0xFF;
+         for ( i = 0 ; i < n ; i++ ) {
+             cpuid(2, &regs[0], &regs[1], &regs[2], &regs[3]);
+                       
+             /* If bit 31 is set, this is an unknown format */
+             for ( j = 0 ; j < 3 ; j++ ) {
+                 if ( regs[j] < 0 ) regs[j] = 0;
+             }
+             /* Byte 0 is level count, not a descriptor */
+             for ( j = 1 ; j < 16 ; j++ ) {
+                 unsigned char des = dp[j];
+                 unsigned char dl, dh;
+                 unsigned int cs;
+                 dh = des >> 4;
+                 dl = des & 0x0F;
+                               /* Black magic... */
+                 switch ( dh )
+                 {
+                 case 0:
+                     switch ( dl ) {
+                     case 6:
+                         /* L1 I cache */
+                         l1i += 8;
+                         break;
+                     case 8:
+                         /* L1 I cache */
+                         l1i += 16;
+                         break;
+                     case 10:
+                         /* L1 D cache */
+                         l1d += 8;
+                         break;
+                     case 12:
+                         /* L1 D cache */
+                         l1d += 16;
+                         break;
+                     default:;
+                         /* TLB, or unknown */
+                     }
+                     break;
+                 case 2:
+                     if ( dl ) {
+                         /* L3 cache */
+                         cs = (dl-1) << 9;
+                         l3 += cs;
+                     }
+                     break;
+                 case 4:
+                     if ( c->x86 > 6 && dl ) {
+                         /* P4 family */
+                         /* L3 cache */
+                         cs = 128 << (dl-1);
+                         l3 += cs;
+                         break;
+                     }
+                     /* else same as 8 - fall through */
+                 case 8:
+                     if ( dl ) {
+                         /* L2 cache */
+                         cs = 128 << (dl-1);
+                         l2 += cs;
+                     }
+                     break;
+                 case 6:
+                     if (dl > 5) {
+                         /* L1 D cache */
+                         cs = 8<<(dl-6);
+                         l1d += cs;
+                     }
+                     break;
+                 case 7:
+                     if ( dl >= 8 ) 
+                     {
+                         /* L2 cache */
+                         cs = 64<<(dl-8);
+                         l2 += cs;
+                     } else {
+                         /* L0 I cache, count as L1 */
+                         cs = dl ? (16 << (dl-1)) : 12;
+                         l1i += cs;
+                     }
+                     break;
+                 default:
+                     /* TLB, or something else we don't know about */
+                     break;
+                 }
+             }
+         }
+         if ( l1i || l1d )
+             printk(KERN_INFO "CPU: L1 I cache: %dK, L1 D cache: %dK\n",
+                    l1i, l1d);
+         if ( l2 )
+             printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
+         if ( l3 )
+             printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
+         /*
+          * This assumes the L3 cache is shared; it typically lives in
+          * the northbridge.  The L1 caches are included by the L2
+          * cache, and so should not be included for the purpose of
+          * SMP switching weights.
+          */
+         c->x86_cache_size = l2 ? l2 : (l1i+l1d);
+     }
+     /* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it */
+     if ( c->x86 == 6 && c->x86_model < 3 && c->x86_mask < 3 )
+         clear_bit(X86_FEATURE_SEP, &c->x86_capability);
+       
+     /* Names for the Pentium II/Celeron processors 
+        detectable only by also checking the cache size.
+        Dixon is NOT a Celeron. */
+     if (c->x86 == 6) {
+         switch (c->x86_model) {
+         case 5:
+             if (l2 == 0)
+                 p = "Celeron (Covington)";
+             if (l2 == 256)
+                 p = "Mobile Pentium II (Dixon)";
+             break;
+                       
+         case 6:
+             if (l2 == 128)
+                 p = "Celeron (Mendocino)";
+             break;
+                       
+         case 8:
+             if (l2 == 128)
+                 p = "Celeron (Coppermine)";
+             break;
+         }
+     }
+     if ( p )
+         strcpy(c->x86_model_id, p);
+ }
+ void __init get_cpu_vendor(struct cpuinfo_x86 *c)
+ {
+     char *v = c->x86_vendor_id;
+     if (!strcmp(v, "GenuineIntel"))
+         c->x86_vendor = X86_VENDOR_INTEL;
+     else if (!strcmp(v, "AuthenticAMD"))
+         c->x86_vendor = X86_VENDOR_AMD;
+     else if (!strcmp(v, "CentaurHauls"))
+         c->x86_vendor = X86_VENDOR_CENTAUR;
+     else
+         c->x86_vendor = X86_VENDOR_UNKNOWN;
+ }
+ struct cpu_model_info {
+     int vendor;
+     int family;
+     char *model_names[16];
+ };
+ /* Naming convention should be: <Name> [(<Codename>)] */
+ /* This table only is used unless init_<vendor>() below doesn't set it; */
+ /* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
+ static struct cpu_model_info cpu_models[] __initdata = {
+     { X86_VENDOR_INTEL,       6,
+       { "Pentium Pro A-step", "Pentium Pro", NULL, "Pentium II (Klamath)", 
+         NULL, "Pentium II (Deschutes)", "Mobile Pentium II",
+         "Pentium III (Katmai)", "Pentium III (Coppermine)", NULL,
+         "Pentium III (Cascades)", NULL, NULL, NULL, NULL }},
+     { X86_VENDOR_AMD, 6, /* Is this this really necessary?? */
+       { "Athlon", "Athlon",
+         "Athlon", NULL, "Athlon", NULL,
+         NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL }}
+ };
+ /* Look up CPU names by table lookup. */
+ static char __init *table_lookup_model(struct cpuinfo_x86 *c)
+ {
+     struct cpu_model_info *info = cpu_models;
+     int i;
+     if ( c->x86_model >= 16 )
+         return NULL;  /* Range check */
+     for ( i = 0 ; i < sizeof(cpu_models)/sizeof(struct cpu_model_info) ; i++ ) {
+         if ( info->vendor == c->x86_vendor &&
+              info->family == c->x86 ) {
+             return info->model_names[c->x86_model];
+         }
+         info++;
+     }
+     return NULL;              /* Not found */
+ }
+ /* Standard macro to see if a specific flag is changeable */
+ static inline int flag_is_changeable_p(u32 flag)
+ {
+     u32 f1, f2;
+     asm("pushfl\n\t"
+         "pushfl\n\t"
+         "popl %0\n\t"
+         "movl %0,%1\n\t"
+         "xorl %2,%0\n\t"
+         "pushl %0\n\t"
+         "popfl\n\t"
+         "pushfl\n\t"
+         "popl %0\n\t"
+         "popfl\n\t"
+         : "=&r" (f1), "=&r" (f2)
+         : "ir" (flag));
+     return ((f1^f2) & flag) != 0;
+ }
+ /* Probe for the CPUID instruction */
+ static int __init have_cpuid_p(void)
+ {
+     return flag_is_changeable_p(X86_EFLAGS_ID);
+ }
+ #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
+ unsigned char eddnr;
+ struct edd_info edd[EDDMAXNR];
+ unsigned int edd_disk80_sig;
+ /**
+  * copy_edd() - Copy the BIOS EDD information
+  *              from empty_zero_page into a safe place.
+  *
+  */
+ static inline void copy_edd(void)
+ {
+      eddnr = EDD_NR;
+      memcpy(edd, EDD_BUF, sizeof(edd));
+      edd_disk80_sig = DISK80_SIGNATURE_BUFFER;
+ }
+ #else
+ static inline void copy_edd(void) {}
+ #endif
+ /*
+  * This does the hard work of actually picking apart the CPU stuff...
+  */
+ void __init identify_cpu(struct cpuinfo_x86 *c)
+ {
+     int junk, i;
+     u32 xlvl, tfms;
+     c->loops_per_jiffy = loops_per_jiffy;
+     c->x86_cache_size = -1;
+     c->x86_vendor = X86_VENDOR_UNKNOWN;
+     c->cpuid_level = -1;      /* CPUID not detected */
+     c->x86_model = c->x86_mask = 0;   /* So far unknown... */
+     c->x86_vendor_id[0] = '\0'; /* Unset */
+     c->x86_model_id[0] = '\0';  /* Unset */
+     memset(&c->x86_capability, 0, sizeof c->x86_capability);
+     c->hard_math = 1;
+     if ( !have_cpuid_p() ) {
+         panic("Processor must support CPUID\n");
+     } else {
+         /* CPU does have CPUID */
+         /* Get vendor name */
+         cpuid(0x00000000, &c->cpuid_level,
+               (int *)&c->x86_vendor_id[0],
+               (int *)&c->x86_vendor_id[8],
+               (int *)&c->x86_vendor_id[4]);
+               
+         get_cpu_vendor(c);
+         /* Initialize the standard set of capabilities */
+         /* Note that the vendor-specific code below might override */
+         /* Intel-defined flags: level 0x00000001 */
+         if ( c->cpuid_level >= 0x00000001 ) {
+                         u32 capability, excap;
+                         cpuid(0x00000001, &tfms, &junk, &excap, &capability);
+                         c->x86_capability[0] = capability;
+                         c->x86_capability[4] = excap;
+                         c->x86 = (tfms >> 8) & 15;
+                         c->x86_model = (tfms >> 4) & 15;
+                         if (c->x86 == 0xf) {
+                                 c->x86 += (tfms >> 20) & 0xff;
+                                 c->x86_model += ((tfms >> 16) & 0xF) << 4;
+                         }
+                         c->x86_mask = tfms & 15;
+         } else {
+             /* Have CPUID level 0 only - unheard of */
+             c->x86 = 4;
+         }
+         /* AMD-defined flags: level 0x80000001 */
+         xlvl = cpuid_eax(0x80000000);
+         if ( (xlvl & 0xffff0000) == 0x80000000 ) {
+             if ( xlvl >= 0x80000001 )
+                 c->x86_capability[1] = cpuid_edx(0x80000001);
+             if ( xlvl >= 0x80000004 )
+                 get_model_name(c); /* Default name */
+         }
+         /* Transmeta-defined flags: level 0x80860001 */
+         xlvl = cpuid_eax(0x80860000);
+         if ( (xlvl & 0xffff0000) == 0x80860000 ) {
+             if (  xlvl >= 0x80860001 )
+                 c->x86_capability[2] = cpuid_edx(0x80860001);
+         }
+     }
+     printk(KERN_DEBUG "CPU: Before vendor init, caps: %08x %08x %08x, vendor = %d\n",
+            c->x86_capability[0],
+            c->x86_capability[1],
+            c->x86_capability[2],
+            c->x86_vendor);
+     /*
+      * Vendor-specific initialization.  In this section we
+      * canonicalize the feature flags, meaning if there are
+      * features a certain CPU supports which CPUID doesn't
+      * tell us, CPUID claiming incorrect flags, or other bugs,
+      * we handle them here.
+      *
+      * At the end of this section, c->x86_capability better
+      * indicate the features this CPU genuinely supports!
+      */
+     switch ( c->x86_vendor ) {
+     case X86_VENDOR_AMD:
+         init_amd(c);
+         break;
+     case X86_VENDOR_INTEL:
+         init_intel(c);
+         break;
+     case X86_VENDOR_CENTAUR:
+         init_centaur(c);
+         break;
+         
+     default:
+         printk("Unsupported CPU vendor (%d) -- please report!\n",
+                c->x86_vendor);
+     }
+       
+     printk(KERN_DEBUG "CPU: After vendor init, caps: %08x %08x %08x %08x\n",
+            c->x86_capability[0],
+            c->x86_capability[1],
+            c->x86_capability[2],
+            c->x86_capability[3]);
+     /* If the model name is still unset, do table lookup. */
+     if ( !c->x86_model_id[0] ) {
+         char *p;
+         p = table_lookup_model(c);
+         if ( p )
+             strcpy(c->x86_model_id, p);
+         else
+             /* Last resort... */
+             sprintf(c->x86_model_id, "%02x/%02x",
+                     c->x86_vendor, c->x86_model);
+     }
+     /* Now the feature flags better reflect actual CPU features! */
+     printk(KERN_DEBUG "CPU:     After generic, caps: %08x %08x %08x %08x\n",
+            c->x86_capability[0],
+            c->x86_capability[1],
+            c->x86_capability[2],
+            c->x86_capability[3]);
+     /*
+      * On SMP, boot_cpu_data holds the common feature set between
+      * all CPUs; so make sure that we indicate which features are
+      * common between the CPUs.  The first time this routine gets
+      * executed, c == &boot_cpu_data.
+      */
+     if ( c != &boot_cpu_data ) {
+         /* AND the already accumulated flags with these */
+         for ( i = 0 ; i < NCAPINTS ; i++ )
+             boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
+     }
+     printk(KERN_DEBUG "CPU:             Common caps: %08x %08x %08x %08x\n",
+            boot_cpu_data.x86_capability[0],
+            boot_cpu_data.x86_capability[1],
+            boot_cpu_data.x86_capability[2],
+            boot_cpu_data.x86_capability[3]);
+ }
+ /* These need to match <asm/processor.h> */
+ static char *cpu_vendor_names[] __initdata = {
+     "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta" };
+ void __init print_cpu_info(struct cpuinfo_x86 *c)
+ {
+     char *vendor = NULL;
+     if (c->x86_vendor < sizeof(cpu_vendor_names)/sizeof(char *))
+         vendor = cpu_vendor_names[c->x86_vendor];
+     else if (c->cpuid_level >= 0)
+         vendor = c->x86_vendor_id;
+     if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor)))
+         printk("%s ", vendor);
+     if (!c->x86_model_id[0])
+         printk("%d86", c->x86);
+     else
+         printk("%s", c->x86_model_id);
+     if (c->x86_mask || c->cpuid_level >= 0) 
+         printk(" stepping %02x\n", c->x86_mask);
+     else
+         printk("\n");
+ }
+ /*
+  *    Get CPU information for use by the procfs.
+  */
+ static int show_cpuinfo(struct seq_file *m, void *v)
+ {
+     /* 
+      * These flag bits must match the definitions in <asm/cpufeature.h>.
+      * NULL means this bit is undefined or reserved; either way it doesn't
+      * have meaning as far as Linux is concerned.  Note that it's important
+      * to realize there is a difference between this table and CPUID -- if
+      * applications want to get the raw CPUID data, they should access
+      * /dev/cpu/<cpu_nr>/cpuid instead.
+        */
+     static char *x86_cap_flags[] = {
+         /* Intel-defined */
+         "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
+         "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
+         "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",
+         "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe",
+         /* AMD-defined */
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, "mp", NULL, NULL, "mmxext", NULL,
+         NULL, NULL, NULL, NULL, NULL, "lm", "3dnowext", "3dnow",
+         /* Transmeta-defined */
+         "recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         /* Other (Linux-defined) */
+         "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", 
+       NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         /* Intel-defined (#2) */
+         "pni", NULL, NULL, "monitor", "ds_cpl", NULL, NULL, "tm2",
+         "est", NULL, "cid", NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         /* VIA/Cyrix/Centaur-defined */
+         NULL, NULL, "xstore", NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+     };
+     struct cpuinfo_x86 *c = v;
+     int i, n = c - cpu_data;
+     int fpu_exception;
+ #ifdef CONFIG_SMP
+     if (!(cpu_online_map & (1<<n)))
+         return 0;
+ #endif
+     seq_printf(m, "processor\t: %d\n"
+                "vendor_id\t: %s\n"
+                "cpu family\t: %d\n"
+                "model\t\t: %d\n"
+                "model name\t: %s\n",
+                n,
+                c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
+                c->x86,
+                c->x86_model,
+                c->x86_model_id[0] ? c->x86_model_id : "unknown");
+     if (c->x86_mask || c->cpuid_level >= 0)
+         seq_printf(m, "stepping\t: %d\n", c->x86_mask);
+     else
+         seq_printf(m, "stepping\t: unknown\n");
+     if ( test_bit(X86_FEATURE_TSC, &c->x86_capability) ) {
+         seq_printf(m, "cpu MHz\t\t: %lu.%03lu\n",
+                    cpu_khz / 1000, (cpu_khz % 1000));
+     }
+     /* Cache size */
+     if (c->x86_cache_size >= 0)
+         seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
+       
+       /* We use exception 16 if we have hardware math and we've either seen it or the CPU claims it is internal */
+     fpu_exception = c->hard_math && (ignore_irq13 || cpu_has_fpu);
+     seq_printf(m, "fdiv_bug\t: %s\n"
+                "hlt_bug\t\t: %s\n"
+                "f00f_bug\t: %s\n"
+                "coma_bug\t: %s\n"
+                "fpu\t\t: %s\n"
+                "fpu_exception\t: %s\n"
+                "cpuid level\t: %d\n"
+                "wp\t\t: %s\n"
+                "flags\t\t:",
+                c->fdiv_bug ? "yes" : "no",
+                c->hlt_works_ok ? "no" : "yes",
+                c->f00f_bug ? "yes" : "no",
+                c->coma_bug ? "yes" : "no",
+                c->hard_math ? "yes" : "no",
+                fpu_exception ? "yes" : "no",
+                c->cpuid_level,
+                c->wp_works_ok ? "yes" : "no");
+     for ( i = 0 ; i < 32*NCAPINTS ; i++ )
+         if ( test_bit(i, &c->x86_capability) &&
+              x86_cap_flags[i] != NULL )
+             seq_printf(m, " %s", x86_cap_flags[i]);
+     seq_printf(m, "\nbogomips\t: %lu.%02lu\n\n",
+                c->loops_per_jiffy/(500000/HZ),
+                (c->loops_per_jiffy/(5000/HZ)) % 100);
+     return 0;
+ }
+ static void *c_start(struct seq_file *m, loff_t *pos)
+ {
+     return *pos < NR_CPUS ? cpu_data + *pos : NULL;
+ }
+ static void *c_next(struct seq_file *m, void *v, loff_t *pos)
+ {
+     ++*pos;
+     return c_start(m, pos);
+ }
+ static void c_stop(struct seq_file *m, void *v)
+ {
+ }
+ struct seq_operations cpuinfo_op = {
+     start:    c_start,
+     next:     c_next,
+     stop:     c_stop,
+     show:     show_cpuinfo,
+ };
+ unsigned long cpu_initialized __initdata = 0;
+ /*
+  * cpu_init() initializes state that is per-CPU. Some data is already
+  * initialized (naturally) in the bootstrap process, such as the GDT
+  * and IDT. We reload them nevertheless, this function acts as a
+  * 'CPU state barrier', nothing should get across.
+  */
+ void __init cpu_init (void)
+ {
+     int nr = smp_processor_id();
+     if (test_and_set_bit(nr, &cpu_initialized)) {
+         printk(KERN_WARNING "CPU#%d already initialized!\n", nr);
+         for (;;) __sti();
+     }
+     printk(KERN_INFO "Initializing CPU#%d\n", nr);
+     /*
+      * set up and load the per-CPU TSS and LDT
+      */
+     atomic_inc(&init_mm.mm_count);
+     current->active_mm = &init_mm;
+     if(current->mm)
+         BUG();
+     enter_lazy_tlb(&init_mm, current, nr);
+     HYPERVISOR_stack_switch(__KERNEL_DS, current->thread.esp0);
+     load_LDT(&init_mm.context);
+     flush_page_update_queue();
+     /* Force FPU initialization. */
+     current->flags &= ~PF_USEDFPU;
+     current->used_math = 0;
+     stts();
+ }
index 0000000000000000000000000000000000000000,76d95ff03a718f505447d2295e5cd0ed03940865..d19218fe3237b16a913356a9b80d1a0716cb441e
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,306 +1,306 @@@
 -      if ( flush_page_update_queue() != 0 )
 -              return;
+ /*
+  *  linux/arch/i386/mm/fault.c
+  *
+  *  Copyright (C) 1995  Linus Torvalds
+  */
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/kernel.h>
+ #include <linux/errno.h>
+ #include <linux/string.h>
+ #include <linux/types.h>
+ #include <linux/ptrace.h>
+ #include <linux/mman.h>
+ #include <linux/mm.h>
+ #include <linux/smp.h>
+ #include <linux/smp_lock.h>
+ #include <linux/interrupt.h>
+ #include <linux/init.h>
+ #include <linux/tty.h>
+ #include <linux/vt_kern.h>            /* For unblank_screen() */
+ #include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <asm/pgalloc.h>
+ #include <asm/hardirq.h>
+ extern void die(const char *,struct pt_regs *,long);
+ pgd_t *cur_pgd;
+ extern spinlock_t timerlist_lock;
+ /*
+  * Unlock any spinlocks which will prevent us from getting the
+  * message out (timerlist_lock is acquired through the
+  * console unblank code)
+  */
+ void bust_spinlocks(int yes)
+ {
+       spin_lock_init(&timerlist_lock);
+       if (yes) {
+               oops_in_progress = 1;
+       } else {
+               int loglevel_save = console_loglevel;
+ #ifdef CONFIG_VT
+               unblank_screen();
+ #endif
+               oops_in_progress = 0;
+               /*
+                * OK, the message is on the console.  Now we call printk()
+                * without oops_in_progress set so that printk will give klogd
+                * a poke.  Hold onto your hats...
+                */
+               console_loglevel = 15;          /* NMI oopser may have shut the console up */
+               printk(" ");
+               console_loglevel = loglevel_save;
+       }
+ }
+ /*
+  * This routine handles page faults.  It determines the address,
+  * and the problem, and then passes it off to one of the appropriate
+  * routines.
+  *
+  * error_code:
+  *    bit 0 == 0 means no page found, 1 means protection fault
+  *    bit 1 == 0 means read, 1 means write
+  *    bit 2 == 0 means kernel, 1 means user-mode
+  */
+ asmlinkage void do_page_fault(struct pt_regs *regs, 
+                               unsigned long error_code,
+                               unsigned long address)
+ {
+       struct task_struct *tsk = current;
+       struct mm_struct *mm;
+       struct vm_area_struct * vma;
+       unsigned long page;
+       unsigned long fixup;
+       int write;
+       siginfo_t info;
+         /* Set the "privileged fault" bit to something sane. */
+         error_code &= 3;
+         error_code |= (regs->xcs & 2) << 1;
++      /* ensure all updates have completed */
++      flush_page_update_queue();
+       /*
+        * We fault-in kernel-space virtual memory on-demand. The
+        * 'reference' page table is init_mm.pgd.
+        *
+        * NOTE! We MUST NOT take any locks for this case. We may
+        * be in an interrupt or a critical region, and should
+        * only copy the information from the master page table,
+        * nothing more.
+        *
+        * This verifies that the fault happens in kernel space
+        * (error_code & 4) == 0, and that the fault was not a
+        * protection error (error_code & 1) == 0.
+        */
+       if (address >= TASK_SIZE && !(error_code & 5))
+               goto vmalloc_fault;
+       mm = tsk->mm;
+       info.si_code = SEGV_MAPERR;
+       /*
+        * If we're in an interrupt or have no user
+        * context, we must not take the fault..
+        */
+       if (in_interrupt() || !mm)
+               goto no_context;
+       down_read(&mm->mmap_sem);
+       vma = find_vma(mm, address);
+       if (!vma)
+               goto bad_area;
+       if (vma->vm_start <= address)
+               goto good_area;
+       if (!(vma->vm_flags & VM_GROWSDOWN))
+               goto bad_area;
+       if (error_code & 4) {
+               /*
+                * accessing the stack below %esp is always a bug.
+                * The "+ 32" is there due to some instructions (like
+                * pusha) doing post-decrement on the stack and that
+                * doesn't show up until later..
+                */
+               if (address + 32 < regs->esp)
+                       goto bad_area;
+       }
+       if (expand_stack(vma, address))
+               goto bad_area;
+ /*
+  * Ok, we have a good vm_area for this memory access, so
+  * we can handle it..
+  */
+ good_area:
+       info.si_code = SEGV_ACCERR;
+       write = 0;
+       switch (error_code & 3) {
+               default:        /* 3: write, present */
+                       /* fall through */
+               case 2:         /* write, not present */
+                       if (!(vma->vm_flags & VM_WRITE))
+                               goto bad_area;
+                       write++;
+                       break;
+               case 1:         /* read, present */
+                       goto bad_area;
+               case 0:         /* read, not present */
+                       if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
+                               goto bad_area;
+       }
+  survive:
+       /*
+        * If for any reason at all we couldn't handle the fault,
+        * make sure we exit gracefully rather than endlessly redo
+        * the fault.
+        */
+       switch (handle_mm_fault(mm, vma, address, write)) {
+       case 1:
+               tsk->min_flt++;
+               break;
+       case 2:
+               tsk->maj_flt++;
+               break;
+       case 0:
+               goto do_sigbus;
+       default:
+               goto out_of_memory;
+       }
+       up_read(&mm->mmap_sem);
+       return;
+ /*
+  * Something tried to access memory that isn't in our memory map..
+  * Fix it, but check if it's kernel or user first..
+  */
+ bad_area:
+       up_read(&mm->mmap_sem);
+       /* User mode accesses just cause a SIGSEGV */
+       if (error_code & 4) {
+               tsk->thread.cr2 = address;
+               /* Kernel addresses are always protection faults */
+               tsk->thread.error_code = error_code | (address >= TASK_SIZE);
+               tsk->thread.trap_no = 14;
+               info.si_signo = SIGSEGV;
+               info.si_errno = 0;
+               /* info.si_code has been set above */
+               info.si_addr = (void *)address;
+               force_sig_info(SIGSEGV, &info, tsk);
+               return;
+       }
+ no_context:
+       /* Are we prepared to handle this kernel fault?  */
+       if ((fixup = search_exception_table(regs->eip)) != 0) {
+               regs->eip = fixup;
+               return;
+       }
+ /*
+  * Oops. The kernel tried to access some bad page. We'll have to
+  * terminate things with extreme prejudice.
+  */
+       bust_spinlocks(1);
+       if (address < PAGE_SIZE)
+               printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
+       else
+               printk(KERN_ALERT "Unable to handle kernel paging request");
+       printk(" at virtual address %08lx\n",address);
+       printk(" printing eip:\n");
+       printk("%08lx\n", regs->eip);
+         page = ((unsigned long *) cur_pgd)[address >> 22];
+         printk(KERN_ALERT "*pde=%08lx(%08lx)\n", page, machine_to_phys(page));
+       if (page & 1) {
+               page &= PAGE_MASK;
+               address &= 0x003ff000;
+                 page = machine_to_phys(page);
+               page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT];
+                 printk(KERN_ALERT "*pte=%08lx(%08lx)\n", page, 
+                        machine_to_phys(page));
+       }
+       die("Oops", regs, error_code);
+       bust_spinlocks(0);
+       do_exit(SIGKILL);
+ /*
+  * We ran out of memory, or some other thing happened to us that made
+  * us unable to handle the page fault gracefully.
+  */
+ out_of_memory:
+       if (tsk->pid == 1) {
+               yield();
+               goto survive;
+       }
+       up_read(&mm->mmap_sem);
+       printk("VM: killing process %s\n", tsk->comm);
+       if (error_code & 4)
+               do_exit(SIGKILL);
+       goto no_context;
+ do_sigbus:
+       up_read(&mm->mmap_sem);
+       /*
+        * Send a sigbus, regardless of whether we were in kernel
+        * or user mode.
+        */
+       tsk->thread.cr2 = address;
+       tsk->thread.error_code = error_code;
+       tsk->thread.trap_no = 14;
+       info.si_signo = SIGBUS;
+       info.si_errno = 0;
+       info.si_code = BUS_ADRERR;
+       info.si_addr = (void *)address;
+       force_sig_info(SIGBUS, &info, tsk);
+       /* Kernel mode? Handle exceptions or die */
+       if (!(error_code & 4))
+               goto no_context;
+       return;
+ vmalloc_fault:
+       {
+               /*
+                * Synchronize this task's top level page-table
+                * with the 'reference' page table.
+                *
+                * Do _not_ use "tsk" here. We might be inside
+                * an interrupt in the middle of a task switch..
+                */
+               int offset = __pgd_offset(address);
+               pgd_t *pgd, *pgd_k;
+               pmd_t *pmd, *pmd_k;
+               pte_t *pte_k;
+               pgd = offset + cur_pgd;
+               pgd_k = init_mm.pgd + offset;
+               if (!pgd_present(*pgd_k))
+                       goto no_context;
+               set_pgd(pgd, *pgd_k);
+               
+               pmd = pmd_offset(pgd, address);
+               pmd_k = pmd_offset(pgd_k, address);
+               if (!pmd_present(*pmd_k))
+                       goto no_context;
+               set_pmd(pmd, *pmd_k);
+                 XEN_flush_page_update_queue(); /* flush PMD update */
+               pte_k = pte_offset(pmd_k, address);
+               if (!pte_present(*pte_k))
+                       goto no_context;
+               return;
+       }
+ }
index 0000000000000000000000000000000000000000,a0e52c2c5ce9fdb4a5a6c7e628303bc8cc2fa952..f20a23a58de31cb045f535b54ef92572a50f287d
mode 000000,100755..100755
--- /dev/null
@@@ -1,0 -1,284 +1,285 @@@
+ #!/bin/sh
+ # mkbuildtree <build tree>
+ #
+ # Creates symbolic links in <build tree> for the sparse tree
+ # in the current directory.
+ # Script to determine the relative path between two directories.
+ # Copyright (c) D. J. Hawkey Jr. 2002
+ # Fixed for Xen project by K. Fraser in 2003.  
+ abs_to_rel ()
+ {
+       local CWD SRCPATH
+                 
+       if [ "$1" != "/" -a "${1##*[^/]}" = "/" ]; then
+               SRCPATH=${1%?}
+       else
+               SRCPATH=$1
+       fi
+       if [ "$2" != "/" -a "${2##*[^/]}" = "/" ]; then
+               DESTPATH=${2%?}
+       else
+               DESTPATH=$2
+       fi
+       CWD=$PWD
+       [ "${1%%[^/]*}" != "/" ] && cd $1 && SRCPATH=$PWD
+       [ "${2%%[^/]*}" != "/" ] && cd $2 && DESTPATH=$PWD
+       [ "$CWD" != "$PWD" ] && cd $CWD
+       BASEPATH=$SRCPATH
+       [ "$SRCPATH" = "$DESTPATH" ] && DESTPATH="." && return
+       [ "$SRCPATH" = "/" ] && DESTPATH=${DESTPATH#?} && return
+       while [ "$BASEPATH/" != "${DESTPATH%${DESTPATH#$BASEPATH/}}" ]; do
+           BASEPATH=${BASEPATH%/*}
+       done
+       SRCPATH=${SRCPATH#$BASEPATH}
+         DESTPATH=${DESTPATH#$BASEPATH}
+         DESTPATH=${DESTPATH#?}
+       while [ -n "$SRCPATH" ]; do
+               SRCPATH=${SRCPATH%/*}
+               DESTPATH="../$DESTPATH"
+       done
+       [ -z "$BASEPATH" ] && BASEPATH="/"
+       [ "${DESTPATH##*[^/]}" = "/" ] && DESTPATH=${DESTPATH%?}
+ }
+ # relative_lndir <target_dir>
+ # Creates a tree of symlinks in the current working directory that mirror
+ # real files in <target_dir>. <target_dir> should be relative to the current
+ # working directory. Symlinks in <target_dir> are ignored. Source-control files
+ # are ignored.
+ relative_lndir ()
+ {
+   local SYMLINK_DIR REAL_DIR pref i j
+   SYMLINK_DIR=$PWD
+   REAL_DIR=$1
+   (
+   cd $REAL_DIR
+   for i in `find . -type d | grep -v SCCS`; do
+     [ -d $SYMLINK_DIR/$i ] || mkdir -p $SYMLINK_DIR/$i
+     (
+     cd $i
+     pref=`echo $i | sed -e 's#/[^/]*#../#g' -e 's#^\.##'`
+     for j in `find . -type f -o -type l -maxdepth 1`; do
+       ln -sf ${pref}${REAL_DIR}/$i/$j ${SYMLINK_DIR}/$i/$j
+     done
+     )
+   done
+   )
+ }
+ [ "$1" == "" ] && { echo "Syntax: $0 <linux tree to xenify>"; exit 1; }
+ # Get absolute path to the destination directory
+ pushd . >/dev/null
+ cd ${1} || { echo "cannot cd to ${1}"; exit 1; }
+ AD=$PWD
+ popd >/dev/null
+   
+ # Get absolute path to the source directory
+ AS=`pwd`
+ # Get path to source, relative to destination
+ abs_to_rel ${AD} ${AS}
+ RS=$DESTPATH
+ # Remove old copies of files and directories at the destination
+ for i in `find . -type f -o -type l` ; do rm -f ${AD}/${i#./} ; done
+ # We now work from the destination directory
+ cd ${AD} || { echo "cannot cd to ${AD}"; exit 1; }
+ # Remove old symlinks
+ for i in `find . -type l`; do rm -f $i; done
+ # Create symlinks of files and directories which exist in the sparse source
+ relative_lndir ${RS}
+ rm -f mkbuildtree
+ set ${RS}/../linux-2.6.*-xen-sparse
+ [ "$1" == "${RS}/../linux-2.6.*-xen-parse" ] && { echo "no Linux 2.6 sparse tree at ${RS}/../linux-2.6.*-xen-sparse"; exit 1; }
+ LINUX_26="$1"
+ # Create links to the shared definitions of the Xen interfaces.
+ rm -rf ${AD}/include/asm-xen/xen-public
+ mkdir  ${AD}/include/asm-xen/xen-public
+ cd     ${AD}/include/asm-xen/xen-public
+ relative_lndir ../../../${RS}/../xen/include/public
+ # Create a link to the shared definitions for the control interface
+ cd ${AD}/include/asm-xen
+ ## Symlinks for files:
+ ## - which are identical in the i386 and xen-i386 architecture-dependent
+ ##   subdirectories.
+ ## - which are identical in the Linux 2.6 and Linux 2.4 ports.
+ cd ${AD}/include/asm-xen
+ ln -sf ../asm-i386/a.out.h 
+ ln -sf ../asm-i386/apicdef.h 
+ ln -sf ../asm-i386/apic.h 
+ ln -sf ../asm-i386/atomic.h 
+ ln -sf ../asm-i386/bitops.h 
+ ln -sf ../asm-i386/boot.h 
+ ln -sf ../asm-i386/byteorder.h 
+ ln -sf ../asm-i386/cache.h 
+ ln -sf ../asm-i386/checksum.h 
+ ln -sf ../asm-i386/cpufeature.h 
+ ln -sf ../asm-i386/current.h 
+ ln -sf ../asm-i386/debugreg.h 
+ ln -sf ../asm-i386/delay.h 
+ ln -sf ../asm-i386/div64.h 
+ ln -sf ../asm-i386/dma.h 
+ ln -sf ../asm-i386/elf.h 
+ ln -sf ../asm-i386/errno.h 
+ ln -sf ../asm-i386/fcntl.h 
+ ln -sf ../asm-i386/floppy.h 
+ ln -sf ../asm-i386/hardirq.h 
+ ln -sf ../asm-i386/hdreg.h 
+ ln -sf ../asm-i386/i387.h 
+ ln -sf ../asm-i386/ide.h 
+ ln -sf ../asm-i386/init.h
+ ln -sf ../asm-i386/io_apic.h
+ ln -sf ../asm-i386/ioctl.h
+ ln -sf ../asm-i386/ioctls.h
+ ln -sf ../asm-i386/ipcbuf.h
+ ln -sf ../asm-i386/ipc.h
+ ln -sf ../asm-i386/kmap_types.h
+ ln -sf ../asm-i386/ldt.h 
+ ln -sf ../asm-i386/linux_logo.h
+ ln -sf ../asm-i386/locks.h 
+ ln -sf ../asm-i386/math_emu.h
+ ln -sf ../asm-i386/mc146818rtc.h
+ ln -sf ../asm-i386/mca_dma.h 
+ ln -sf ../asm-i386/mman.h 
+ ln -sf ../asm-i386/mmu.h 
+ ln -sf ../asm-i386/mmx.h 
+ ln -sf ../asm-i386/mpspec.h 
+ ln -sf ../asm-i386/msgbuf.h 
++ln -sf ../asm-i386/msr.h 
+ ln -sf ../asm-i386/mtrr.h 
+ ln -sf ../asm-i386/namei.h 
+ ln -sf ../asm-i386/param.h 
+ ln -sf ../asm-i386/parport.h 
+ ln -sf ../asm-i386/pgtable-3level.h 
+ ln -sf ../asm-i386/poll.h 
+ ln -sf ../asm-i386/posix_types.h 
+ ln -sf ../asm-i386/ptrace.h 
+ ln -sf ../asm-i386/resource.h 
+ ln -sf ../asm-i386/rwlock.h 
+ ln -sf ../asm-i386/rwsem.h 
+ ln -sf ../asm-i386/scatterlist.h
+ ln -sf ../asm-i386/semaphore.h 
+ ln -sf ../asm-i386/sembuf.h 
+ ln -sf ../asm-i386/serial.h 
+ ln -sf ../asm-i386/setup.h 
+ ln -sf ../asm-i386/shmbuf.h 
+ ln -sf ../asm-i386/shmparam.h 
+ ln -sf ../asm-i386/sigcontext.h 
+ ln -sf ../asm-i386/siginfo.h 
+ ln -sf ../asm-i386/signal.h 
+ ln -sf ../asm-i386/smplock.h 
+ ln -sf ../asm-i386/socket.h 
+ ln -sf ../asm-i386/sockios.h 
+ ln -sf ../asm-i386/softirq.h 
+ ln -sf ../asm-i386/spinlock.h 
+ ln -sf ../asm-i386/statfs.h 
+ ln -sf ../asm-i386/stat.h 
+ ln -sf ../asm-i386/string-486.h 
+ ln -sf ../asm-i386/string.h 
+ ln -sf ../asm-i386/termbits.h 
+ ln -sf ../asm-i386/termios.h 
+ ln -sf ../asm-i386/timex.h 
+ ln -sf ../asm-i386/tlb.h 
+ ln -sf ../asm-i386/types.h 
+ ln -sf ../asm-i386/uaccess.h 
+ ln -sf ../asm-i386/ucontext.h 
+ ln -sf ../asm-i386/unaligned.h
+ ln -sf ../asm-i386/unistd.h 
+ ln -sf ../asm-i386/user.h 
+ ln -sf ../asm-i386/vm86.h 
+ ln -sf ../../${LINUX_26}/include/asm-xen/balloon.h
+ ln -sf ../../${LINUX_26}/include/asm-xen/ctrl_if.h
+ ln -sf ../../${LINUX_26}/include/asm-xen/evtchn.h
+ ln -sf ../../${LINUX_26}/include/asm-xen/gnttab.h
+ ln -sf ../../${LINUX_26}/include/asm-xen/hypervisor.h
+ ln -sf ../../${LINUX_26}/include/asm-xen/multicall.h
+ ln -sf ../../${LINUX_26}/include/asm-xen/xen_proc.h
+ mkdir -p linux-public && cd linux-public
+ ln -sf ../../../${LINUX_26}/include/asm-xen/linux-public/privcmd.h
+ ln -sf ../../../${LINUX_26}/include/asm-xen/linux-public/suspend.h
+ cd ${AD}/arch/xen/kernel
+ ln -sf ../../i386/kernel/i387.c
+ ln -sf ../../i386/kernel/init_task.c
+ ln -sf ../../i386/kernel/pci-i386.c
+ ln -sf ../../i386/kernel/pci-i386.h
+ ln -sf ../../i386/kernel/ptrace.c
+ ln -sf ../../i386/kernel/semaphore.c 
+ ln -sf ../../i386/kernel/sys_i386.c 
+ ln -sf ../../../${LINUX_26}/arch/xen/kernel/ctrl_if.c
+ ln -sf ../../../${LINUX_26}/arch/xen/kernel/evtchn.c
+ ln -sf ../../../${LINUX_26}/arch/xen/kernel/fixup.c
+ ln -sf ../../../${LINUX_26}/arch/xen/kernel/gnttab.c
+ ln -sf ../../../${LINUX_26}/arch/xen/kernel/reboot.c
+ ln -sf ../../../${LINUX_26}/arch/xen/kernel/skbuff.c
+ ln -sf ../../../${LINUX_26}/arch/xen/i386/kernel/ioport.c
+ ln -sf ../../../${LINUX_26}/arch/xen/i386/kernel/pci-dma.c
+ cd ${AD}/arch/xen/lib
+ ln -sf ../../i386/lib/checksum.S 
+ ln -sf ../../i386/lib/dec_and_lock.c 
+ ln -sf ../../i386/lib/getuser.S 
+ ln -sf ../../i386/lib/iodebug.c 
+ ln -sf ../../i386/lib/memcpy.c 
+ ln -sf ../../i386/lib/mmx.c
+ ln -sf ../../i386/lib/old-checksum.c 
+ ln -sf ../../i386/lib/strstr.c 
+ ln -sf ../../i386/lib/usercopy.c 
+ ln -sf ../../../${LINUX_26}/arch/xen/kernel/xen_proc.c
+ cd ${AD}/arch/xen/mm
+ ln -sf ../../i386/mm/extable.c 
+ ln -sf ../../i386/mm/pageattr.c 
+ ln -sf ../../../${LINUX_26}/arch/xen/i386/mm/hypervisor.c
+ cd ${AD}/arch/xen/drivers/balloon
+ ln -sf ../../../../${LINUX_26}/drivers/xen/balloon/balloon.c
+ cd ${AD}/arch/xen/drivers/console
+ ln -sf ../../../../${LINUX_26}/drivers/xen/console/console.c 
+ cd ${AD}/arch/xen/drivers/dom0
+ ln -sf ../../../../${LINUX_26}/drivers/xen/privcmd/privcmd.c core.c
+ cd ${AD}/arch/xen/drivers/evtchn
+ ln -sf ../../../../${LINUX_26}/drivers/xen/evtchn/evtchn.c
+ cd ${AD}/arch/xen/drivers/netif/frontend
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/netfront/netfront.c main.c
+ cd ${AD}/arch/xen/drivers/netif/backend
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/netback/common.h
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/netback/control.c
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/netback/interface.c
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/netback/netback.c main.c
+ cd ${AD}/arch/xen/drivers/blkif/backend
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/blkback/common.h
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/blkback/blkback.c main.c
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/blkback/control.c
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/blkback/interface.c
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/blkback/vbd.c
+ cd ${AD}/arch/xen/drivers/blkif/frontend
+ ln -sf ../../../../../${LINUX_26}/drivers/xen/blkfront/blkfront.c